// 引入 nodemailer 模块，该模块用于在 Node.js 中发送电子邮件
const nodemailer = require('nodemailer');
// 引入自定义的配置模块，该模块导出了包含邮箱、数据库等配置信息的对象
const config_module = require("./config")

/**
 * 创建发送邮件的代理
 * 此代理用于与邮件服务器建立连接并发送邮件
 */
// 使用 nodemailer 的 createTransport 方法创建一个邮件传输对象
// 该对象配置了邮件服务器的相关信息，包括主机、端口、是否使用安全连接以及认证信息
let transport = nodemailer.createTransport({
    // 指定邮件服务器的主机地址，这里使用的是 QQ 邮箱的 SMTP 服务器
    host: 'smtp.163.com',
    // 指定连接邮件服务器的端口号，465 通常用于安全的 SMTP 连接
    port: 465,
    // 表示是否使用安全连接，true 表示使用 SSL/TLS 加密
    secure: true,
    // 认证信息，用于登录邮件服务器
    auth: {
        // 从配置模块中获取发送方的邮箱地址
        user: config_module.email_user, 
        // 从配置模块中获取邮箱的授权码或密码，用于验证身份
        pass: config_module.email_pass 
    }
});


/**
 * 发送邮件的函数
 * @param {Object} mailOptions_ 发送邮件的参数，包含收件人、主题、内容等信息
 * @returns {Promise} 返回一个 Promise 对象，成功时 resolve 邮件发送的响应信息，失败时 reject 错误信息
 */
function SendMail(mailOptions_){
    // 返回一个 Promise 对象，用于处理异步操作
    return new Promise(function(resolve, reject){
        // 使用之前创建的邮件传输对象的 sendMail 方法发送邮件
        // 第一个参数是邮件选项对象，包含收件人、主题、内容等信息
        // 第二个参数是回调函数，当邮件发送完成时会调用该函数
        transport.sendMail(mailOptions_, function(error, info){
            // 如果发送邮件过程中出现错误
            if (error) {
                // 打印错误信息到控制台
                console.log(error);
                // 拒绝 Promise，并传递错误信息
                reject(error);
            } else {
                // 打印邮件成功发送的信息，包含服务器的响应信息
                console.log('邮件已成功发送：' + info.response);
                // 解决 Promise，并传递服务器的响应信息
                resolve(info.response)
            }
        });
    })

}

// 将 SendMail 函数作为模块的属性导出，以便其他模块可以使用
module.exports.SendMail = SendMail
